home *** CD-ROM | disk | FTP | other *** search
- NAME SETP_MAIN
- PAGE 75,132
- TITLE SETP.ASM -- PROCEDURE TO SET PAGE LINES AND PERFORATION SKIP
- ;
- ;
- ; NO STACK SEGMENT
- ;
- DISPLAY MACRO MESSAGE
- MOV AH,09 ;REQUEST DISPLAY
- MOV DX,OFFSET MESSAGE ;GET MESSAGE
- INT 21H ;DOS SERVICE TO PRINT
- ENDM
- ;
- CODE SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
- ;
- PUBLIC ASCII,DATE,TIME,ENTRY,SETP
- ORG 100H ;SETUP FOR .COM FORMAT
- ENTRY: JMP START
- ;
- ; SKIP OVER DATA SEGMENT
- ;
- SUBTTL DATA AREA - SKIPPED
- ;
- DB 'Time_:##:##' ;TIME STAMP
- DB 'Date_:--------' ;DATE STAMP
- DB 'S LEOCE' ;MARKER
- ;
- MONTAB DB 'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'
- ;
- MSG DB 'SYSTEM: Intervention required on LPT1 $'
- INFO1 DB 10,13,'LPT1: Page length set for 11 inches$'
- INFO2 DB 10,13,'LPT1: Perforation skip set to 09 lines$'
- INFO3 DB 10,13,'LPT1: Line printer ready',10,13,'$'
- ROWCOL DW ? ;ROW AND COLUMN FOR CURSOR
- CMDLINE DB 24,27,'9',27,'C',00,11,27,'N',09,27,'2'
- DB 13,'LPT1: SET PAGE LEN=11; LPI=6',09
- DB 'WAITING FOR WORK - ',
- ;
- ;
- DAY DB 2 DUP ('0') ;PAD WITH ZEROS WHEN < 10
- DB ' ' ;SEPARATOR
- MONTH DB 3 DUP (0) ;THE MONTH
- DB ' '
- YEAR DB 4 DUP (0) ;THE YEAR - NULL FOR HERE
- DB 2 DUP (20H) ;2 SPACES FOR SEPARATION
- HOUR DW '00'
- DB ':'
- MINS DW '00'
- DB ':'
- SECS DW '00'
- DB 07,13,27,'<',10
- MSGLEN EQU $-CMDLINE
- ;
- SUBTTL SETP - PRINTER INIT UTILITY
- ;
- START: ;FAR AWAY FROM DOS 2.10
- SETP PROC NEAR ;A PUBLIC PROC FOR OS USE
- STI ;RESTART INTERRUPTS
- CALL B10TST ;SEE IF PRINTER IS READY
- CALL DATE ;GET DATE OF INIT
- CALL TIME ;TIME OF INITIALIZATION
- CALL C10PRT ;CALL PRINT ROUTINE
- RET
- SETP ENDP ;END OF UTILITY DRIVER
- ;END OF MAIN CODE
- ;
- SUBTTL PRINTER TEST ROUTINE
- ;
- B10TST PROC NEAR ;LOCAL PROCS ARE NEAR BY
- MOV AH,03 ;FETCH CURSOR POSITION AND SAVE IT
- MOV BH,00
- INT 10H ;BIOS FOR CURSOR SERVICE
- MOV ROWCOL,DX ;SAVE THE RETURNED VALUE
- B20:
- MOV AH,02 ;TEST PRINTER STATUS
- MOV DX,00 ;
- INT 17H ;BIOS SERVICE TO TEST DEVICE
- TEST AH,00101001B ;SEE IF PRINTER READY ELSE MESSAGE
- JZ B30 ;NO - MESSAGE AND EXIT
- CALL E10MSG ;PROVIDE MESSAGE
- JMP B20
- B30:
- RET
- B10TST ENDP
- ;
- C10PRT PROC NEAR ;PROCEDURE TO PRINT
- LEA SI,CMDLINE ;GET THE PRINTER COMMANDS
- MOV CX,MSGLEN ;NUMBER OF BYTES TO PRINT
- CALL D10OUT ;DISPLAY THE LINE
- RET
- C10PRT ENDP
- ;
- D10OUT PROC NEAR ;PRINT MESSAGE
- MOV DX,0000 ;PRINTER #0
- D20:
- MOV AH,00 ;REQUEST PRINT
- MOV AL,[SI] ;GET CHAR FROM LINE
- INT 17H ;BIOS TO PRINT SERVICE
- INC SI
- LOOP D20
- DISPLAY INFO1
- DISPLAY INFO2
- DISPLAY INFO3
- RET
- D10OUT ENDP
- ;
- E10MSG PROC NEAR ;DISPLAY A MESSAGE
- MOV AH,02 ;REQUEST SET CURSOR FUNCTION
- MOV BH,00 ;
- MOV DX,ROWCOL ;OLD POSITION SAVED
- INT 10H ;BIOS FOR DISPLAY SERVICE
- LEA DX,MSG ;GET ERROR MESSAGE
- MOV AH,09H
- INT 21H
- RET
- E10MSG ENDP
- ;
- COMMENT * THIS PROCEDURE WRITES THE DOS TIME WITHOUT PROMPTING FOR THE
- NEW TIME LIKE THE DOS TIME COMMAND DOES. SOMETIMES YOU JUST
- - NEED TO SEE THE TIME, SAY IN A BATCH PROCEDURE WITHOUT ACTUALLY
- RESETTING IT. DOS MAKES THIS UNCOMFORTABLE
- *
- ;
- SUBTTL TIME CONVERSION UTILITY
- ;
- TIME PROC NEAR
- PUBLIC TIME ;
- MOV AH,02CH ;REQUEST DOS FETCH TIME
- INT 21H ;
- MOV AL,CH ;HOURS - 0..23 IN AL
- CALL CONVT ;CONVERT
- MOV HOUR,'00' ;BLANK FOR NOW
- ADD HOUR,AX ;ASCII ADD
- MOV AL,CL ;DO SAME FOR MINUTES
- CALL CONVT
- MOV MINS,'00'
- ADD MINS,AX
- MOV AL,DH ;SECONDS
- CALL CONVT
- MOV SECS,'00' ;ASCII ZEROES
- ADD SECS,AX
- RET
- TIME ENDP
- ;
- ;
- SUBTTL - DATE CONVERSION UTILITY
- DATE PROC NEAR ;DATE PROCEDURE
- PUBLIC DATE ;MAKE PUBLIC FOR LINKER
- ;
- MOV AH,2AH ;GET DATE FROM DOS
- INT 21H ;RETURN IN CX,DX
- PUSH CX ;SAVE THE CURRENT CONTENTS
- PUSH DX ;SAVE THE WHOLE DATE NOW
- MOV DI,OFFSET DAY+1 ;THE DAY OF THE MONTH
- SUB DH,DH ;ZERO THE HIGH PART OF DX
- MOV AX,DX ;THE DAY NUMBER
- SUB DX,DX ;ZERO THE DX REGISTER
- CALL ASCII
- POP AX ;GET THE OLD VALUE BACK FROM STK
- MOV DI,OFFSET MONTH ;THE MONTH NUMBER
- MOV SI,OFFSET MONTAB ;MONTH TABLE
- SUB AL,AL ;GET RID OF DAYS...
- XCHG AH,AL ;SWAP POSITIONS FOR CORRECT ADD LEN
- MOV CX,0003 ;SETUP ADDR IS SI+3*MONTH-3 BYTES
- MUL CL
- SUB AX,3
- ADD SI,AX ;ADD OFFSET AND MOVE 3 BYTES
- CLD ;CLEAR DIRECTION TO FWD
- REP MOVSB ;MOVE STRING BYTES
- MOV DI,OFFSET YEAR+3
- POP AX
- SUB DX,DX
- CALL ASCII
- RET ;BACK TO CALLER
- DATE ENDP
- ;
- SUBTTL ASCII CONVERSION ROUTINE
- ;
- ASCII PROC NEAR ;CONVERT
- MOV BX,0AH ;DIVISOR
- MOV CL,30H ;CONVERSION FACTOR FOR ASCII
- RPT1:
- XOR DX,DX
- DIV BX ;CLEAR DX
- OR DL,CL
- MOV [DI],DL
- DEC DI ;GET NEXT CHAR
- CMP AX,0 ;DONE YET?
- JNZ RPT1 ;NO - MORE
- RET ;YES - QUIT
- ASCII ENDP
- ;
- CONVT PROC NEAR
- PUBLIC CONVT ;CONVERT THE TIME SEGMENTS
- PUSH CX
- XOR AH,AH ;
- MOV CL,10 ;DIVISOR FOR ASCII ADJUST
- DIV CL
- POP CX ;RESTORE OLD VALUES
- RET ;DONE
- CONVT ENDP
- ;
- CODE ENDS
- END ENTRY